import type { Ref } from "vue";
import instance from "../request";

interface IAdminLoginParams {
  username: string;
  password: string;
}

interface IAdminLoginRes {
  token: string;
  tokenHead: string;
}

// interface IType {
//   data: any;
//   code: number;
//   message: string;
// }

// Promise<T> 泛型表示new Promise中resolve(？) ？的值，即new Promise().then(res=>{})得到的res的值。
// 本例中，Promise<T>————instance.post("/admin/login", data)就是new Promise，经过响应拦截，最终在Login中的 result = ...adminLogin() 其中的result就是泛型T约束的值。
// 【1】登录接口
const adminLogin = (data: IAdminLoginParams): Promise<IAdminLoginRes> => {
  return instance.post("/admin/login", data);
}

// a 用户个人信息 
// 菜单项数组
interface IMenuItem {
  createTime: string;
  hidden: 0 | 1;
  icon: string;
  id: number;
  level: number;
  name: string;
  parentId: number;
  sort: number;
  title: string;
}

// 用户信息返回值
interface IAdminInfoRes {
  icon: string;
  menus: IMenuItem[];
  roles: string[];
  username: string;
}


// 【2】登出api

interface ILogoutRes {
  code: number;
  data: {};
  message: string;
}
const logout = (): Promise<ILogoutRes> => instance.post("/admin/logout");




// 请求
// 【】获取用户个人信息（）
const getAdminInfo = (): Promise<IAdminInfoRes> => { return instance.get("/admin/info") }





// 【3】获取用户登录列表信息
// b 用户信息列表
// 获取用户的用户名和密码列表
interface IAdminListParams {
  keyword?: string | Ref<string>;
  pageNum?: number | Ref<number>;
  pageSize?: number | Ref<number>;
}

// 返回值
interface IAdminListItem {
  createTime: string;
  email: string;
  icon: string;
  id: number;
  loginTime: string;
  nickName: string;
  note: string;
  password: string;
  status: 0 | 1;
  username: string
}

interface IAdminListRes {
  list: IAdminListItem[];
  pageNum: number;
  pageSize: number;
  total: number;
  totalPage: number;
}

// 获取用户信息列表  ----?表示data可选
const getAdminList = (data?: IAdminListParams): Promise<IAdminListRes> => {
  return instance.get("/admin/list", {
    params: data
  })
}


// 【】获取角色列表
const getRoleList = (data?: any): Promise<any> => instance.get("/role/list", { params: data })


// 【】修改用户信息
const adminUpdate = (data: IAdminListItem) => instance.post(`/admin/update/${data.id}`, data);

// 【】修改用户状态信息。
const adminUpdateStatus = (data: { id: number; status: 0 | 1; }): Promise<number> => instance.post(`/admin/updateStatus/${data.id}`, undefined, { params: { status: data.status } });

// 【】添加新用户
const adminRegister = (data: IAdminListItem): Promise<IAdminListItem> => instance.post("/admin/register", data)


export { adminLogin, logout, getAdminInfo, getAdminList, getRoleList, adminUpdate, adminUpdateStatus, adminRegister }
export type { IAdminListItem, IAdminListRes }